package logica.mundo;

import java.awt.Graphics;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import logica.interfaces.Dibujable;

/**
 *
 * @author JorgeIvan
 */
public class Bloque implements Dibujable, Runnable {

    private Punto punto;
    private int LimY;
    private boolean sentido;
    private ImageIcon imagen;

    public Bloque(Punto punto, int LimY, boolean sentido,ImageIcon imagen) {
        this.punto = punto;
        this.LimY = LimY;
        this.sentido = sentido;
        this.imagen=imagen;
    }

    public Punto getPunto() {
        return punto;
    }

    public void setPunto(Punto punto) {
        this.punto = punto;
    }

    public int getLimY() {
        return LimY;
    }

    public void setLimY(int LimY) {
        this.LimY = LimY;
    }

    public boolean isSentido() {
        return sentido;
    }

    public void setSentido(boolean sentido) {
        this.sentido = sentido;
    }

    public ImageIcon getImagen() {
        return imagen;
    }

    public void setImagen(ImageIcon imagen) {
        this.imagen = imagen;
    }

    private void caer(int Vo,int angulo) {
        double Xo = getPunto().x;
        double Yo = getPunto().y;
        double g = 9.8;
        double t = 0;
        if (isSentido()) {
            double Vox = Vo * Math.cos(angulo*Math.PI);
            double Voy = Vo * Math.sin(angulo*Math.PI);
            while (isAdentro()) {
                setPunto(new Punto(Vox * t + Xo, ((-0.5 * g * -Math.pow(t, 2) + Voy * t + Yo))));
                t += 0.1;
                try {
                    Thread.sleep(4);
                } catch (InterruptedException ex) {
                    Logger.getLogger(Bloque.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        } else {
            double Vox = -Vo * Math.cos(angulo*Math.PI/180);
            double Voy = Vo * Math.sin(angulo*Math.PI/180);
            while (isAdentro()) {
                setPunto(new Punto(Vox * t + Xo, ((-0.5 * g * -Math.pow(t, 2) + Voy * t + Yo))));
                t += 0.1;
                try {
                    Thread.sleep(4);
                } catch (InterruptedException ex) {
                    Logger.getLogger(Bloque.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }

    private boolean isAdentro() {
        boolean adentro = true;
        if (getPunto().y > getLimY()) {
            return adentro = false;
        }
        return adentro;
    }

    @Override
    public void run() {

        caer(50,70);
    }

    @Override
    public void dibujar(Graphics g) {

        g.drawImage(getImagen().getImage(), (int)getPunto().x, (int)getPunto().y, null);

    }

}
